package 中等.贪心思想;

import java.util.Arrays;

/**
 * 给你一个整数数组 nums 和一个整数 k 。你可以将 nums 划分成一个或多个 子序列 ，使 nums 中的每个元素都 恰好 出现在一个子序列中。
 * 在满足每个子序列中最大值和最小值之间的差值最多为 k 的前提下，返回需要划分的 最少 子序列数目。
 * 子序列 本质是一个序列，可以通过删除另一个序列中的某些元素（或者不删除）但不改变剩下元素的顺序得到。
 *
 * @ https://leetcode.cn/problems/partition-array-such-that-maximum-difference-is-k/?envType=daily-question&envId=2025-06-19
 * @date 2025/06/19
 */
public class 划分数组使最大差为K_2294 {

    public static void main(String[] args) {

    }

    /**
     * 贪心+排序
     * 排序后选择差值最多为 k的最长子序列划分
     */
    public int partitionArray(int[] nums, int k) {
        int ans = 0;
        Arrays.sort(nums);

        int left = 0, right = 0;
        while (right < nums.length) {
            right++;
            if (right < nums.length && nums[right] - nums[left] <= k) {
                continue;
            }

            left = right;
            ans++;
        }

        return ans;
    }

}
